import {toast} from './uni-tools.js'
// 常用
// 时间戳转成日期
function toDate(timestamp) {
  if (!timestamp) return false
  const timeLen = timestamp.toString().length
  if (timeLen != 10 && timeLen != 13) return false
  let date = 0
  if (timeLen == 10) {
    date = new Date(timestamp * 1000) //时间戳为10位需*1000
  } else {
    date = new Date(timestamp)
  }
  const Y = add0(date.getFullYear())
  const M = add0(date.getMonth() + 1)
  const D = add0(date.getDate())
  const h = add0(date.getHours())
  const m = add0(date.getMinutes())
  const s = add0(date.getSeconds())
  return [Y, M, D, h, m, s]
}

// 计算现在到指定未来时间点的时间戳时间差
function getDifference(timeData) {
  if (!timeData.Y || !timeData.M || !timeData.D) return false
  const now = new Date().getTime()
  const future = new Date(timeData.Y, timeData.M - 1, timeData.D, timeData.h, timeData.m, timeData.s).getTime()
  const difference = future - now
  return difference
}

// 将时间戳形式的时间差转为常见时间差(倒计时推荐使用)
function durationToTime(difference) {
  if (getType(difference) != 'number') return false
  if (difference <= 0) return false
  // 如果时间戳位13位则将时间戳转为10位
  if ((difference.toString()).length == 13) {
    difference = parseInt(difference / 1000)
  }
  const date = parseInt(difference / 86400)
  difference = difference % 86400
  const hour = parseInt(difference / 3600)
  difference = difference % 3600
  const minute = parseInt(difference / 60)
  difference = difference % 60
  const second = difference
  // 返回时间段
  return [add0(date), add0(hour), add0(min), add0(second)]
}

// 十以内补零
function add0(num) {
  if (num!=0 && !num) return false
  num = num.toString()
  return num[1] ? num : '0' + num
}

// 类型判断
function getType(obj) {
  if (!obj) return false
  const type = typeof obj
  if (type != "object") {
    return type
  }
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1')
}

// 全类型非空验证(可判断错误)
function isEmpty(e, isInfo = true) {
  let type = false
  // !e  (针对未定义,null,undefined,[数字0,空字符串])
  // Object.keys(e).length === 0  (针对空数组,空对象,[数字0,空字符串])
  if (!e || Object.keys(e).length === 0) {
    type = true
  }
  if (e === true) {
	  type = false
  }
  if (type && isInfo) {
    toast(isInfo)
  }
  return type
}

// 屏蔽当前调用页面的所有console.log输出
function disLog() {
  console.log = function () { }
}

// 判断操作系统 (可以根据返回字符串的首字母来判断操作系统，再针对性的写逻辑)
function getSystem() {
  const version = navigator.userAgent
  if (version.indexOf('Android') > -1 || version.indexOf('Linux') > -1) {
    return 'android'
  } else if (!!version.match(/\(i[^]+( U)? CPU.+Mac OS X/)) {
    return 'ios'
  } else if (version.indexOf("Windows NT") != -1) {
    return 'windows'
  } else {
    return 'other'
  }
}

// 隐藏手机号
function hideMobile(mobile) {
	return `${mobile.slice(0,3)}****${mobile.slice(7,11)}`
}


// 验证：
// 汉人姓名验证（2-4）
function realnameTest(realname, info) {
  if (!(/^[\u4e00-\u9fa5]{2,4}$/.test(realname))) {
    if (info) {
      toast(info)
    }
    return false
  }
  return true
}

// 手机号验证
function mobileTest(mobile, info) {
  if (!(/^[1]([3-9])[0-9]{9}$/.test(mobile))) {
    if (info) {
      toast(info)
    }
    return false
  }
  return true
}

// 身份证号验证
function idTest(idNumber, info) {
  if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(idNumber))) {
    if (info) {
      toast(info)
    }
    return false
  }
  return true
}

// 邮箱验证
function emailTest(email, info) {
  if (!(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(email))) {
    if (isInfo) {
      toast(info)
    }
    return false
  }
  return true
}

// 指定范围的数字验证
function numberTest(number, min, max, info) {
  number = parseFloat(number)
  if (!(/^[0-9]*$/.test(number)) || number > max || number < min) {
    if (info) {
      toast(info)
    }
    return false
  }
  return true
}

// 指定长度的字符串验证
function strLength(el, min, max, info) {
  el = el.toString()
  if (el.length > max || el.length < min) {
    if (info) {
      toast(info)
    }
    return false
  }
  return true
}

export {
  toDate, // 时间戳转成日期
  getDifference, // 现在到未来的时间戳时间差
  durationToTime, // 时间戳时间差转时间差
  add0, // 十以内补零
  getType, // 类型判断
  isEmpty, // 非空验证
  disLog, // 屏蔽console.log
  getSystem, // 系统判断
  hideMobile, // 隐藏手机号
  realnameTest, // 汉人姓名验证（2-4）
  mobileTest, // 手机号验证
  idTest, // 身份证号验证
  emailTest, // 邮箱验证
  numberTest, // 指定范围的数字验证
  strLength // 指定长度的字符串验证
}